#!/bin/bash
# programa4
# Função que exibe uma tela de ajuda
# autor: Leandro Santiago da Silva 
# data: 06/08/2007

ExibirAjuda()
{
   echo "uso: $0 -x número -y número"
}

# Função que exibe uma tela com a versão
ExibirVersion()
{
   echo -e "\tversão 0.1ALPHA"
}

# Função que recebe um parâmetro
# e retorna 0 se ele é um número inteiro. E 1, caso contrário
EhNumero()
{
   ( [ $1 -ne 0 ] || [ $1 -e 0 ] ) &> /dev/null && return 0 || return 1
}

# Função que verifica os parâmetros
FiltraParam()
{
   # vetor que guarda todos os parâmetros
   PARAMET=($@);
   # Índice verificado
   INDICE=0
   # Indica se devo parar a verificação
   FIMCADEIA=false
   # Alguma opção que pode ser ativada/desativada (você pode ter quantas quiser!)
   DEBUG=false
   # A quantidade de parâmetros que devo verificar (poderia pegar o tamanho do vetor, mas assim também funciona)
   QtdPar=$#
   # Enquanto houver parâmetros para verificar
   # e não estiver
   while ((INDICE<QtdPar)) && ( ! $FIMCADEIA )
   do
      case ${PARAMET[$INDICE]} in
         -x|-y|-z|--paramx|--paramy|--paramz)
         if ((INDICE<QtdPar-1))
         then
            ((INDICE++))

            # Aqui verifico parâmetros que necessitam de argumento
            # juntei tudo num case para facilitar a localização
            # e modificação
            case ${PARAMET[((INDICE-1))]} in
               -x|--paramx) PARAMX=${PARAMET[$INDICE]}
               ;;
               -y|--paramy) PARAMY=${PARAMET[$INDICE]}
               ;;
               -z|--paramz) PARAMZ=${PARAMET[$INDICE]}
               ;;
               *) echo "${PARAMET[((INDICE-1))]} precisa de um argumento válido"
                  FIMCADEIA=true
               ;;
            esac
         fi
         ;;

         # Parâmetro que finaliza a verificação dos parâmetros
         -h|--help)
            ExibirAjuda
            FIMCADEIA=true
         ;;
         # Parâmetro que finaliza a verificação dos parâmetros
         -v|--version)
            ExibirVersion
            FIMCADEIA=true
         ;;
         # Parâmetro que não necessita de argumento
         --enable-debug) DEBUG=true
         ;;
         # Outro que também não precisa
         --disable-debug) DEBUG=false
         ;;
         *) echo "Parâmetro invalido: ${PARAMET[((INDICE))]} no índice $INDICE"
            FIMCADEIA=true
         ;;
      esac
      ((INDICE++))
   done
  
}


# Inicializo as variáveis, com qualquer coisa que não seja número
  
PARAMY=default
PARAMX=default
PARAMZ=default
  
if [ $# -eq 0 ]
then
   ExibirAjuda
   exit 1
else
   FiltraParam $@

   if ! EhNumero $PARAMY
   then
      echo "-y precisa de um parâmetro valido, que não seja $PARAMY"
   fi

   if ! EhNumero $PARAMX
   then
      echo "-x precisa de um parâmetro valido, que não seja $PARAMX"
   fi

   if ! EhNumero $PARAMZ
   then
      echo "-z precisa de um parâmetro válido, que não seja $PARAMZ"
   fi

   if $DEBUG; then
      echo "Agora eu vou executar algo em ${PARAMX} X ${PARAMY} X ${PARAMZ} com o debug habilitado"
   else
      echo "Agora eu vou executar algo em ${PARAMX} X ${PARAMY} X ${PARAMZ} com o debug desabilitado"
   fi
fi
